Try harder not to beep on events which are not meant to insert stuff in
authorMatthias Clasen <mclasen@redhat.com>
Tue, 2 Jan 2007 15:49:31 +0000 (15:49 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 2 Jan 2007 15:49:31 +0000 (15:49 +0000)
2007-01-02  Matthias Clasen  <mclasen@redhat.com>

        * gtk/gtktextbuffer.c (gtk_text_view_key_press_event):
        Try harder not to beep on events which are not meant to
        insert stuff in the buffer.  (#390514, Yevgen Muntyan)

svn path=/trunk/; revision=17020

ChangeLog
gtk/gtktextview.c

index 8e2b367758eb08d825cad8556c9af57614692dde..9c68fbc497a72965aa2cbdf7da4622c01940479f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtktextbuffer.c (gtk_text_view_key_press_event):
+       Try harder not to beep on events which are not meant to
+       insert stuff in the buffer.  (#390514, Yevgen Muntyan) 
+
 2007-01-02  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktextbufferrichtext.c: Small documentation fixes.
index 757f28a1cfaf62510b268991423a601bb684e7ec..839cb3d3844282959e38dde65c8e4e0b275ed981 100644 (file)
@@ -3901,7 +3901,8 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event)
     }
   /* Pass through Tab as literal tab, unless Control is held down */
   else if ((event->keyval == GDK_Tab ||
-            event->keyval == GDK_KP_Tab) &&
+            event->keyval == GDK_KP_Tab ||
+            event->keyval == GDK_ISO_Left_Tab) &&
            !(event->state & GDK_CONTROL_MASK))
     {
       /* If the text widget isn't editable overall, or if the application
@@ -3929,8 +3930,17 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event)
   gtk_text_view_reset_blink_time (text_view);
   gtk_text_view_pend_cursor_blink (text_view);
 
-  if (!retval && event->length)
-    gtk_widget_error_bell (widget);
+  if (!retval)
+    {
+      /* We only want to beep if we are reasonably sure
+       * the event was meant to insert some character into
+       * the buffer, but failed.  We don't beep on events 
+       * which look like attempts to activate an accelerator.
+       */
+      if (!event->is_modifier && 
+          ((event->state & (gtk_accelerator_get_default_mod_mask () & ~GDK_SHIFT_MASK)) == 0))
+        gtk_widget_error_bell (widget);
+    } 
 
   return retval;
 }